#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 1;
const int H = 1000000 + 1;

struct A
{
    int v, pos;
}a[N];

long long C[N], cnt[N];

int lowbit(int i) { return i & (-i);}

// 在k位置增加i
void update(int k, int i)
{
    for(; k <= N; k += lowbit(k))
        C[k] += i;
}

// 查询 1 - i 的范围
int getSum(int k)
{
    int ans = 0;
    for(; k >= 1; k -= lowbit(k))
        ans += C[k];
    return ans;
}

bool compare(const A &lhs, const A &rhs)
{
    return (lhs.v < rhs.v) || (lhs.v == rhs.v && lhs.pos < rhs.pos); 
}

int main()
{
#ifdef LOCAL
    freopen("PREV-31.in", "r", stdin);
#endif
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int n; cin >> n;
    for(int i = 0; i < n; ++i) cin >> a[i].v, a[i].pos = i + 1;
    sort(a, a + n, compare);

    // 正向
    for(int i = 0; i < n; ++i)
    {
        update(a[i].pos, 1);
        cnt[a[i].pos] += a[i].pos - getSum(a[i].pos);
    }

    memset(C, 0, sizeof(C));
    // 反向
    for(int i = n - 1; i >= 0; i--)
    {
        update(a[i].pos, 1);
        cnt[a[i].pos] += (n - a[i].pos) -(getSum(n) - getSum(a[i].pos)); 
    }

    long long ans = 0;
    for(int i = 1; i <= n; ++i)
    {
        ans += cnt[i] * (cnt[i] + 1) / 2;
    }
    cout << ans << endl;
    return 0;
}